package com.kj.tms.pri.system.org.service;


import com.kj.tms.common.bean.dto.Pager;
import com.kj.tms.common.bean.dto.ReturnData;
import com.kj.tms.common.bean.dto.TreeData;
import com.kj.tms.pri.system.org.dto.OrgDto;

import java.util.List;

/**
 * @ProjectName:
 * @Package: com.hongtu.tms.system.org.service
 * @ClassName: OrgService
 * @Description: 组织机构管理OrgService
 * @Author: 董世栋
 * @CreateDate:
 * @UpdateUser:
 * @UpdateDate:
 * @UpdateRemark:
 * @Version: 1.0
 * Copyright: 北京宏图天安 Copyright (c) 2017
 */
public interface OrgService {
    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method getTreeData
     * @description 获取根据条件查询机构树
     * @author 黄冬冬
     * @version 1.0
     * @date
     */
    List<TreeData> getDirectChildrenTreeData(OrgDto model);

    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method getTreeData
     * @description 获取根据条件查询机构树
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<TreeData> getTreeData(OrgDto model);

    /**
     * @param userCode
     * @return List<TreeData>
     * @throws
     * @method getTreeDataByUserCode
     * @description 通过查询用户编码获取组织机构树信息
     * @author wangguoqing
     * @version 1.0
     * @date
     */
    List<TreeData> getTreeDataByUserCode(String userCode);

    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method queryByList
     * @description 根据 OrgDto传值条件查询机构信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<TreeData> queryByList(OrgDto model);

    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method queryByList
     * @description 根据 OrgDto传值条件查询机构信息,只包含直接下级
     * @author 黄冬冬
     * @version 1.0
     * @date
     */
    List<TreeData> queryDirectChildrenByList(OrgDto model);

    /**
     * @param model
     * @return List<OrgDto>
     * @throws
     * @method listByOrg
     * @description 根据 OrgDto传值条件查询机构信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> listByOrg(OrgDto model);


    /**
     * @param
     * @return
     * @throws
     * @method [queryOrgByList]
     * @description [模糊匹配查询机构数据到列表]
     * @author 王国庆
     * @version 1.0
     * @date 2017年12月28日 14:22
     */
    List<OrgDto> queryOrgByList(OrgDto orgDto);

    /**
     * @param orgDto
     * @return List<OrgDto>
     * @throws
     * @method queryOrgByConditions
     * @description 根据dto条件查全部
     * @author 董世栋
     * @version 1.0
     * @date
     */
    OrgDto getByConditions(OrgDto orgDto);

    /**
     * @param userId
     * @return List<OrgDto>
     * @throws
     * @method queryOrgByUser
     * @description 根据用户查询机构
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> queryOrgByUser(String userId);

    /**
     * @param model
     * @return OrgDto
     * @throws
     * @method addDto
     * @description 添加组织
     * @author 董世栋
     * @version 1.0
     * @date
     */
    ReturnData insertDto(OrgDto model);

    /**
     * @param model
     * @return null
     * @throws
     * @method updateBySelective
     * @description 更新组织
     * @author 董世栋
     * @version 1.0
     * @date
     */
    ReturnData updateBySelective(OrgDto model);

    /**
     * @param model
     * @return Pager
     * @throws
     * @method queryByPage
     * @description 分页查询组织信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    Pager listByPage(OrgDto model);

    /**
     * @param model
     * @return
     * @throws
     * @method updateByValidMark
     * @description 是否启用
     * @author 董世栋
     * @version 1.0
     * @date
     */
    void updateByValidMark(OrgDto model);

    /**
     * @param dto
     * @return
     * @throws
     * @method delOrg
     * @description 逻辑删除
     * @author 董世栋
     * @version 1.0
     * @date
     */
    ReturnData deleteOrg(OrgDto dto);

    /**
     * @param orgCode
     * @return OrgDto
     * @throws
     * @method getOrgByOrgCode
     * @description 根据OrgCode获取组织信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    OrgDto getOrgByOrgCode(String orgCode);

    /**
     * @param orgCode
     * @return orgName
     * @throws
     * @method getOrgNameByOrgCode
     * @description 根据OrgCode获取组织信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    String getOrgNameByOrgCode(String orgCode);

    /**
     * @Method listByOrgCodes
     * @Param
     * @Return
     * @Exception
     * @Description [     通过orgCode查询本机构以及下级机构-]
     * @Author yangruidong
     * @Version 1.0
     * @Date 2018/5/31 21:19
     */
    List<OrgDto> listByOrgCodes(String orgCode);

    /**
     * @Method listByOrgCode
     * @Param
     * @Return
     * @Exception
     * @Description [通过id查询本机构以及下级机构得纳税主体-]
     * @Author yangruidong
     * @Version 1.0
     * @Date 2018/5/31 21:22
     */

    List<OrgDto> listByOrgCode(String orgCode,
                               String taxCode,
                               String period) throws Exception;

    /**
     * @Method listByTaxPayerCodes
     * @Param
     * @Return
     * @Exception
     * @Description [通过ids批量查询-纳税主体]
     * @Author yangruidong
     * @Version 1.0
     * @Date 2018/5/31 21:30
     */
    List<OrgDto> listByTaxPayerCodes(List orgCode);

    /**
     * @Method listByTaxPayer
     * @Param
     * @Return
     * @Exception
     * @Description [通过纳税主体查询]
     * @Author yangruidong
     * @Version 1.0
     * @Date 2018/5/31 21:31
     */
    List<OrgDto> listByTaxPayer(String[] orgCode);
}
